<?php

namespace app\common\behavior;

use app\common\model\Attachment;
use app\common\service\PlatFormFactory;
use think\Config;
use think\db\Query;
use think\Lang;
use think\Loader;
use think\Request;
use think\Response;
use think\Session;

class Common
{

    public function appInit()
    {
        Config::set('database.query', '\\we\\ExtendQuery');

        $allowLangList = Config::get('allow_lang_list') ?? ['zh-cn', 'en'];
        Lang::setAllowLangList($allowLangList);
    }

    public function appDispatch(&$dispatch)
    {
        $pathinfoArr = explode('/', request()->pathinfo());
        if (!Config::get('url_domain_deploy') && $pathinfoArr && in_array($pathinfoArr[0], ['index', 'api'])) {
            //如果是以index或api开始的URL则关闭路由检测
            \think\App::route(false);
        }
    }

    public function moduleInit(&$request)
    {
        if($request->param('uniacid')){
            $uniacid = $request->param('uniacid');
            Session::set('uniacid', $uniacid);
        }else if(request()->header('uniacid')){
            $uniacid = request()->header('uniacid');
        }else if(Session::has('uniacid')){
            $uniacid = Session::get('uniacid');
        }else{
            $uniacid = 0;
        }

        if(IS_CLI){
            $path = getcwd() . '/../../data/config.php';
        }else{
            $path = getcwd() . '/../../../data/config.php';
        }
        Config::set('site.uniacid', $uniacid);
        Config::set('site.is_we7', is_file($path));
        // 初始化站点配置
        (new \we\WeEngine())->configSql();
        
        
        // 设置mbstring字符编码
        mb_internal_encoding("UTF-8");

        // 如果修改了index.php入口地址，则需要手动修改cdnurl的值
        $url = preg_replace("/\/(\w+)\.php$/i", '', $request->root());
        // 如果未设置__CDN__则自动匹配得出
        if (!Config::get('view_replace_str.__CDN__')) {
            Config::set('view_replace_str.__CDN__', $url);
        }
        // 如果未设置__PUBLIC__则自动匹配得出
        if (!Config::get('view_replace_str.__PUBLIC__')) {
            Config::set('view_replace_str.__PUBLIC__', $url . '/');
        }
        // 如果未设置__ROOT__则自动匹配得出
        if (!Config::get('view_replace_str.__ROOT__')) {
            Config::set('view_replace_str.__ROOT__', preg_replace("/\/public\/$/", '', $url . '/'));
        }
        // 如果未设置cdnurl则自动匹配得出
        if (!Config::get('site.cdnurl')) {
            Config::set('site.cdnurl', $url);
        }
        // 如果未设置cdnurl则自动匹配得出
        if (!Config::get('upload.cdnurl')) {
            Config::set('upload.cdnurl', $url);
        }
        if (Config::get('app_debug')) {
            // 如果是调试模式将version置为当前的时间戳可避免缓存
            Config::set('site.version', time());
            // 如果是开发模式那么将异常模板修改成官方的
            Config::set('exception_tmpl', THINK_PATH . 'tpl' . DS . 'think_exception.tpl');
        }
        // 如果是trace模式且Ajax的情况下关闭trace
        if (Config::get('app_trace') && $request->isAjax()) {
            Config::set('app_trace', false);
        }
        // 切换多语言
        if (Config::get('lang_switch_on')) {
            $lang = $request->get('lang');
            if (preg_match("/^([a-zA-Z\-_]{2,10})\$/i", $lang)) {
                \think\Cookie::set('think_var', $lang);
            }
        }
        // Form别名
        if (!class_exists('Form')) {
            class_alias('fast\\Form', 'Form');
        }
    }

    public function addonBegin(&$request)
    {
        // 加载插件语言包
        $lang = request()->langset();
        $lang = preg_match("/^([a-zA-Z\-_]{2,10})\$/i", $lang) ? $lang : 'zh-cn';
        Lang::load([
            APP_PATH . 'common' . DS . 'lang' . DS . $lang . DS . 'addon' . EXT,
        ]);
        $this->moduleInit($request);
    }

    public function responseSend(Response $response)
    {
        $data = $response->getData();
        if (isset($data['data']['fullurl'])) {
            $platformfactory = new PlatFormFactory();

            $platformObj = $platformfactory->create();

            if (method_exists($platformObj, 'checkImage')) {
                $platformObj->checkImage($data['data']['fullurl']);
            }
        }
    }
}
